package edu.asselvi.seguros.reports;

import java.io.File;
import java.io.FileWriter; 
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import edu.asselvi.seguros.dao.FaturaDao;
import edu.asselvi.seguros.db.ConnectionFactory;
import edu.asselvi.seguros.db.DbUtils;
import edu.asselvi.seguros.exception.ESegurosErrosGeral;
import edu.asselvi.seguros.exception.SegurosException;
import edu.asselvi.seguros.pojo.Fatura;
import edu.asselvi.seguros.utils.Utils;

public class RelBalanco extends DbUtils {
	
	
	public void exibir() {
		
		/*
		 * print string format para fazer o controle de quebra
		 * %  : representa o texto
		 * -  : alinhamento justificado a esquerda
		 * 5  : numero de espacos
		 * s  : space
		 * %n : quebra de linha
		 */
		System.out.printf("%-5s", "Cod");
		System.out.printf("%-12s", "Data");
		System.out.printf("%-6s", "Tipo");
		System.out.printf("%-20s", "Contrato");
		System.out.printf("%-10s", "Valor");
		System.out.printf("%-8s", "Operacao");
		System.out.printf("%n");

		Connection conn = null;
		try {
			
			conn = new ConnectionFactory().getConnection();
		
			Utils utils = new Utils();

			List<Fatura> faturas = new FaturaDao(conn).list();

			double subtotal = 0;
			
			for (Fatura fatura : faturas) {
				System.out.printf("%-5s", fatura.getId_fatura());
				System.out.printf("%-12s", utils.converteData(fatura.getData_processamento()));
				System.out.printf("%-6s", fatura.getTipoFatura());
				System.out.printf("%-20s", fatura.getFk_id_contrato());
				System.out.printf("%-10s", fatura.getValor());
				
				switch (fatura.getTipoFatura()) {
					case 101: 
						System.out.printf("%-8s", "(+)"); 
						subtotal += fatura.getValor(); 
						break;
					case 102: 
						System.out.printf("%-8s", "(+)"); 
						subtotal += fatura.getValor();
						break;
					case 201: 
						System.out.printf("%-8s", "(-)");
						subtotal -= fatura.getValor(); 
						break;
					case 202: 
						System.out.printf("%-8s", "(-)");
						subtotal -= fatura.getValor();
						break;
					case 203: 
						System.out.printf("%-8s", "(-)");
						subtotal -= fatura.getValor();
						break;
				default: break;
				}
				System.out.printf("%n");
			}

			System.out.printf("%42s", "SUBTOTAL  ");
			System.out.printf("%-10s", subtotal);
			
		} catch (SegurosException e) {
			System.err.println(e.getMessage());
			
		} catch (SQLException e) {
			System.err.println(ESegurosErrosGeral.ERRO_DE_CONEXAO);
			
		} finally {
			close(conn);
		}
	}
	public void gerarArquivoTxt() {

		/*
		 * print string format para fazer o controle de quebra
		 * %  : representa o texto
		 * -  : alinhamento justificado a esquerda
		 * 5  : numero de espacos
		 * s  : space
		 * %n : quebra de linha
		 */

		String arquivo = "Relatorios/Faturamento.txt";
		
		FileWriter fw = null;
		PrintWriter pw = null;
		Connection conn = null;
		try {

			fw = new FileWriter(arquivo, false);
			pw = new PrintWriter(fw);
			conn = new ConnectionFactory().getConnection();
			
			System.out.println();
			pw.printf("%-5s", "Cod");
			pw.printf("%-12s", "Data");
			pw.printf("%-6s", "Tipo");
			pw.printf("%-20s", "Contrato");
			pw.printf("%-10s", "Valor");
			pw.printf("%-8s", "Operacao");
			pw.printf("%n");

			Utils utils = new Utils();
			
			List<Fatura> faturas = new FaturaDao(conn).list();
			
			double subtotal = 0;
			
			for (Fatura fatura : faturas) {
				pw.printf("%-5s", fatura.getId_fatura());
				pw.printf("%-12s", utils.converteData(fatura.getData_processamento()));
				pw.printf("%-6s", fatura.getTipoFatura());
				pw.printf("%-20s", fatura.getFk_id_contrato());
				pw.printf("%-10s", fatura.getValor());
				
				switch (fatura.getTipoFatura()) {
				case 101: 
					pw.printf("%-8s", "(+)"); 
					subtotal += fatura.getValor(); 
					break;
				case 102: 
					pw.printf("%-8s", "(+)"); 
					subtotal += fatura.getValor();
					break;
				case 201: 
					pw.printf("%-8s", "(-)");
					subtotal -= fatura.getValor(); 
					break;
				case 202: 
					pw.printf("%-8s", "(-)");
					subtotal -= fatura.getValor();
					break;
				case 203: 
					pw.printf("%-8s", "(-)");
					subtotal -= fatura.getValor();
					break;
				default: break;
				}
				pw.printf("%n");
			}
			
			pw.printf("%42s", "SUBTOTAL  ");
			pw.printf("%-10s", subtotal);

			File file = new File(arquivo);
			System.out.println("RELATORIO GERADO: " + file.getAbsolutePath());
			
		} catch (SegurosException e) {
			System.err.println(e.getMessage());
			
		} catch (SQLException e) {
			System.err.println(ESegurosErrosGeral.ERRO_DE_CONEXAO);
			
		} catch (IOException e) {
			System.err.println(ESegurosErrosGeral.ERRO_ABRIR_ARQUIVO);
			
		} finally {
			close(conn);
			close(fw);
			close(pw);
		}
	}
}
